/**
 * @author zhangshuai
 * @version V1.0
 * @Project Java2_26
 * @Package PACKAGE_NAME
 * @Description:
 * @Date 2025/5/14 16:07
 */
//抽象类用abstract关键字修饰
//抽象类的作用：抽象类作为父类，只能被继承，不能被实例化，抽象类中的抽象方法看成是规则，子类继承必须去重写抽象方法
//或者子类也必须声明成抽象类
public abstract class AbstractTest {
    /*/**
     * 抽象类。
     *
     * 抽象方法：
     * 	如果一个方法被 abstract 关键字修饰了，那么该方法称为抽象方法，抽象方法不能有方法体，不能被调用。
     * 	抽象方法的必须以分号结尾。
     * 	语法：[ abstract 返回值类型  方法名(形参列表); ]
     *
     * 	如果一个类中有方法被声明了抽象方法，那么该类必须声明成抽象类。
     *
     * 抽象类的特点：
     * 	1：抽象类中可以包含抽象方法。也可以没有定义抽象方法。
     * 	2：抽象类不能被实例化，不能创建抽象类的对象。
     * 	3：抽象类只能作为父类存在，只能 被继承。
     * 	4：抽象类中的抽象方法，要么在子类中被实现。implements，要么将子类声明成抽象类。
     *
     */

    public void eat(){
        System.out.println("吃");
    }
    //抽象方法
    public abstract void sleep();
    //抽象方法
    public abstract void run();

    public static void main(String[] args) {
        //抽象类不能被实例化，不能创建抽象类的对象。
       // AbstractTest abstractTest = new AbstractTest();

        //子类实例化，创建对象
        A a = new A();
        a.eat();
        a.sleep();
        a.run();

    }

}

//写一个类去继承抽象类,必须实现抽象类中的抽象方法
class A extends AbstractTest{
    //实现抽象方法,子类要去重写抽象方法
    //如果子类不重写抽象方法，子类也是抽象类
    @Override
    public void sleep() {
        System.out.println("子类+睡觉");
    }

    @Override
    public void run() {
        System.out.println("子类+跑步");
    }
}
//写一个类去继承抽象类,1.必须实现抽象类中的抽象方法 2.当前类变为抽象类
abstract class B extends AbstractTest{
    //实现抽象方法,子类要去重写抽象方法
    //如果子类不重写抽象方法，子类也是抽象类


}
